package com.project.easy.common.util.dto;

import com.project.easy.common.util.string.StringUtil;

import java.io.Serializable;

/**
 * @author GreatorMan.cool
 * @copyright: Copyright (c) 2020
 * @company: 扬起科技有限公司
 * @date 2021/9/29 21:57
 * @param <T> 数据类型
 * @description:
 */
public class R<T> implements Serializable {
    /**
     * 编码
     */
    private String code = "200";
    /**
     * 数据
     */
    private T body;
    /**
     * 消息
     */
    private String msg = "成功";
    /**
     * 数据签名
     */
    private String sign;
    /**
     * 子错误编码
     */
    private String subCode;
    /**
     * 子错误提示信息
     */
    private String subMsg;
    /**
     * 成功返回对象构造
     * @param t 数据类型
     * @return 返回对象构造
     * @param <T> 数据类型
     */
    public static <T>   R<T>  success(T t) {
        R<T> tr = new R<>();
        tr.setBody(t);
        return tr;
    }
    /**
     * 成功返回对象构造
     * @param errorCode 错误编码
     * @param <T> 泛型数据类型
     * @return 返回对象构造
     *
     */
    public static <T>   R<T>  fail(String errorCode) {
        return  fail(errorCode, null);
    }
    /**
     * 成功返回对象构造
     * @param errorCode 错误编码
     * @param msg 错误信息
     * @return 返回对象构造
     * @param <T> 泛型数据类型
     */
    public static <T>    R<T>  fail(String errorCode, String msg) {
        R tr = new R<>();
        tr.setCode(StringUtil.isBlank(errorCode) ? "500" : errorCode);
        tr.setMsg(StringUtil.isBlank(msg) ? "后台业务异常处理失败" : msg);
        return tr;
    }
    public void setSubCode(String subCode) {
        this.subCode = subCode;
    }

    public void setSubMsg(String subMsg) {
        this.subMsg = subMsg;
    }
    public String getSubCode() {
        return StringUtil.isBlank(subCode) ? this.getCode() : subCode;
    }
    public String getSubMsg() {
        return StringUtil.isBlank(subMsg) ? this.getMsg() : subMsg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public T getBody() {
        return body;
    }

    public void setBody(T body) {
        this.body = body;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }
}
